package juc.exchanger;

import java.util.List;
import java.util.concurrent.Exchanger;

/**
 * exchanger线程2：消费者线程
 * 
 * @author guweiqiang
 * 2018年7月17日
 */
public class Consumer implements Runnable {
	
	// 生产者与消费者需要交换的数据
	private List<String> data;
	
	// 生产者和消费者的交换对象
	private Exchanger<List<String>> exchanger;
	
	Consumer(List<String> data, Exchanger<List<String>> exchanger) {
		this.data = data;
		this.exchanger = exchanger;
	}

	/**
	 * 消费者线程操作
	 */
	public void run() {
		// 消费者从exchanger里获取data
		try {
			// 此处也可以单独再定义一个接收data的变量
			data = exchanger.exchange(data); // 如果data没有producer产生的数据，则会被阻塞
		} catch (Exception e) {
			e.printStackTrace();
		}
		if(data==null) {
			return;
		}
		System.out.println("Consumer从exchanger里提取到了data.size:"+data.size());
		
		// 打印data里的值
		for(int j=1; j<=5; j++) {
			System.out.println("data["+ j + "]:" + data.get(j-1));
		}
	}

}
